package com.library.service;

import com.library.dto.*;
import com.library.entity.BookTag;
import com.library.result.PageResult;
import com.library.vo.BookTagVO;
import com.library.vo.BookVO;
import com.library.vo.RecommendationsVO;

import java.util.List;

public interface BookService {

    /**
     * 新增图书
     * @param bookDTO
     */
    void save(BookDTO bookDTO);

    /**
     * 分页查询所有图书
     * @param bookPageQueryDTO
     * @return
     */
    PageResult pageQuery(BookPageQueryDTO bookPageQueryDTO);

    /**
     * 修改图书信息
     * @param bookDTO
     */
    void update(BookDTO bookDTO, Long id);

    /**
     * 根据id删除图书
     * @param id
     */
    void deleteById(Long id);

    /**
     * 批量删除图书
     * @param ids
     */
    void deleteBatch(List<Long> ids);

    /**
     * 根据id查询图书详细
     * @param id
     * @return
     */
    BookVO getBookDetailedById(Long id);

    /**
     * 搜索
     * @param searchPageDTO
     * @return
     */
    PageResult searchPageQuery(SearchPageDTO searchPageDTO);

    /**
     * 推荐图书
     * @param userId
     * @return
     */
    List<RecommendationsVO> getRecommendations(Long userId);

    /**
     * 添加标签
     * @param bookId
     * @param bookTagDTO
     */
    void addTag(Long bookId, BookTagDTO bookTagDTO);

    /**
     * 修改标签
     * @param tagId
     * @param bookTagDTO
     */
    void updateTag(Long tagId, BookTagDTO bookTagDTO);

    /**
     * 根据图书id查询标签
     * @param bookId
     * @return
     */
    List<BookTagVO> getTags(Long bookId);

    /**
     * 搜索标签
     * @param pageQueryDTO
     * @param keyword
     * @return
     */
    PageResult searchTags(PageQueryDTO pageQueryDTO, String keyword);

    /**
     * 根据标签id查询图书详细
     * @param tagId
     * @return
     */
    BookVO getBooksByTagId(Long tagId);

    /**
     * 删除标签
     * @param bookId
     * @param tagId
     */
    void deleteTag(Long bookId, Long tagId);

}
